搜索 K
Appearance
博客正在加载中...
Appearance
SpringBoot 除了支持 properties,还支持 yaml 的配置文件(文件后缀可以是 yaml,也可以是 yml)
YAML 是 "YAML Ain't Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。
非常适合用来做以数据为中心的配置文件
我们先来看一个实际的例子,再讲解其语法:
person:
userName: zhangsan
boss: false
birth: 2019/12/12 20:12:33
age: 18
pet:
name: tomcat
weight: 23.4
interests: [篮球,游泳]首先配置了一个 Person,然后后面缩进的内容,就是 Person 的信息,例如 username;
然后有个 pet 属性,后面又有缩进,就是 Pet 自己的信息,例如 name 和 weight。
格式为 key: value,注意 kv 之间有空格
大小写敏感
使用缩进表示层级关系
缩进不允许使用 tab,只允许空格
缩进的空格数不重要,只要相同层级的元素左对齐即可
# 表示注释
字符串无需加引号,加不加都行;但要注意有特殊字符的情况:
'\n',会作为几个字符;"\n",会作为换行符数据类型
字面量:单个的、不可再分的值,例如 date、boolean、string、number、null
k: v 对象:键值对的集合。map、hash、set、object
# 行内写法:
k: {k1:v1,k2:v2,k3:v3}
#或
k:
k1: v1
k2: v2
k3: v3数组:一组按次序排列的值。array、list、queue
# 行内写法:
k: [v1,v2,v3]
#或者
k:
- v1
- v2
- v3我们新建一个 JavaBean:
@Component
@ConfigurationProperties(prefix = "person")
@ToString
@Data
public class Person {
private String userName;
private Boolean boss;
private Date birth;
private Integer age;
private Pet pet;
private String[] interests;
private List<String> animal;
private Map<String, Object> score;
private Set<Double> salarys;
private Map<String, List<Pet>> allPets;
} 给 Pet 对象加个 weight 属性:
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Pet {
private String name;
private Double weight;
}然后在 resources 目录下新建一个 application.yml 文件:
person:
userName: zhangsan
boss: true
birth: 2022/5/20
age: 18
pet:
name: 小猫
weight: 2
interests: [sing, dance, rap, basketball]
animal: [阿猫, 阿狗]
score: #多行写法
english: 100
math: 120
chinese: 130
salarys:
- 1000
- 2000
allPets:
sick:
- {name: 小猫, weight: 15}
- name: 小狗2
weight: 3
- name: 小狗3
weight: 3
healthy:
- { name: 大猫, weight: 15 }
- { name: 大狗, weight: 15 } 打印:在主程序 MainApplication 中,获取和打印对象
System.out.println(run.getBean(Person.class)); 运行结果:
Person(userName=zhangsan, boss=true, birth=Fri May 20 00:00:00 CST 2022, age=18, pet=Pet(name=小猫, weight=2.0), interests=[sing, dance, rap, basketball], animal=[阿猫, 阿狗], score={english=100, math=120, chinese=130}, salarys=[1000.0, 2000.0], allPets={sick=[Pet(name=小猫, weight=15.0), Pet(name=小狗2, weight=3.0), Pet(name=小狗3, weight=3.0)], healthy=[Pet(name=大猫, weight=15.0), Pet(name=大狗, weight=15.0)]})除了配置数据方便之外,配置 SpringBoot 也方便,例如使用 yaml 之前,要配置 banner 和 cache:
spring.banner.image.bitdepth=4
spring.cache.type=redis
spring.cache.redis.time-to-live=11000 使用 yaml 后:可以清晰的看层级关系,而且可以少写一些前缀
spring:
banner:
image:
bitdepth: 4
cache:
type: redis
redis:
time-to-live: 11000
我们在写 SpringBoot 本身的配置的时候,是有自动提示的:

而我们写自己的配置的时候,则没有(例如刚刚我们写 person 的数据),如果有提示会方便很多。其实我们打开 Person 类,可以看到上方有个提示,未配置注解处理器:
在 SpringBoot 文档中也有提示怎么配置(加个依赖)

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency> 这样就有自动提示了。以后可能有不少 JavaBean 和配置文件绑定的配置,有提示能提升效率

注意:虽然提示是 user-name,但是也能绑定到 userName 上 文档还说:这只是自动提示的依赖,打包的时候可以不引入该依赖,配置下 exclude 即可:
如果既有 application.properties,也有 application.yml 文件,那么都会生效